/**
 * 生成唯一组件ID
 * @param {String} compType 组件类型（staticText、paramGroup等）
 * @returns {String} 唯一ID
 */
export function generateCompId(compType) {
  const prefix = `COMP_${compType.toUpperCase()}_`;
  const randomStr = Math.random().toString(36).substring(2, 8);
  return prefix + randomStr;
}

/**
 * 从paramGroups中提取所有参数（扁平结构）
 * @param {Array} paramGroups 参数组列表
 * @returns {Array} 所有参数列表
 */
export function flattenParams(paramGroups) {
  let params = [];
  const traverse = (groups) => {
    groups.forEach(group => {
      // 提取当前组的参数
      if (group.paramItems && group.paramItems.length) {
        params = [...params, ...group.paramItems];
      }
      // 递归处理子组
      if (group.childGroups && group.childGroups.length) {
        traverse(group.childGroups);
      }
    });
  };
  traverse(paramGroups);
  return params;
}

/**
 * 根据paramCode查找参数详情
 * @param {Array} paramGroups 参数组列表
 * @param {String} paramCode 参数编码
 * @returns {Object|null} 参数详情
 */
export function findParamByCode(paramGroups, paramCode) {
  const allParams = flattenParams(paramGroups);
  return allParams.find(param => param.paramCode === paramCode) || null;
}

/**
 * 排序组件（按sortOrder升序）
 * @param {Array} components 组件列表
 * @returns {Array} 排序后的组件列表
 */
export function sortComponents(components) {
  return [...components].sort((a, b) => (a.sortOrder || 0) - (b.sortOrder || 0));
}